package systeme;

import java.util.Arrays;

import rdp.RdP;

/**
 * 
 * @author chris
 *
 */
public class AlgoGrapheRdp {

	RdP mon_rdp;
	
	public AlgoGrapheRdp(RdP un_rdp){
		super();
		mon_rdp=un_rdp;
	}
	/**
	 * Parcours toutes les place en entrée de la transition et on regarde si elles sont toutes marquées
	 * @param marquage : le marquage du réseau de pétri
	 * @param transition 
	 * @return
	 */
	public boolean estFranchissable(boolean [] marquage, int transition){
		for(int i=0; i<mon_rdp.pre[transition].length;i++){
			if(marquage[mon_rdp.pre[transition][i]]==false){
				return false;
			}
		}
		return true;
	}
	
	public int [] transitionsFranchissables(){
		int [] res=null;
		return res;
	}
	
	public boolean[] franchir(boolean[] marquage, int transition){
		boolean [] res = new boolean[mon_rdp.place.length];
		//faire une copie de m dans res
		res=Arrays.copyOf(marquage, mon_rdp.place.length);
		//je franchis la transition t a partir de m
		//je parcours les pre conditions et je les mets a faux
		for(int i=0; i<mon_rdp.pre[transition].length;i++){
			if(marquage[mon_rdp.pre[transition][i]]==true){
				res[mon_rdp.pre[transition][i]]=false;
			}
		}
		for(int i=0; i<mon_rdp.pre[transition].length;i++){
			if(marquage[mon_rdp.pre[transition][i]]==true){
				res[mon_rdp.post[transition][i]]=false;
			}
		}


		//je parcours les posts conditions et les mets a vrai
		return res;
	}
}
